// package com.shengxi.test;
//
// import org.eclipse.paho.client.mqttv3.*;
// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
//
// import java.util.Map;
//
// /**
//  * @author WXY
//  * @date 2022/6/29 20:43
//  */
// public class MyMQTTCallback implements MqttCallbackExtended {
//
//     private static final Logger log = LoggerFactory.getLogger(MyMQTTCallback.class);
//
//     private MyMQTTClient myMQTTClient;
//
//     public MyMQTTCallback(MyMQTTClient myMQTTClient) {
//         this.myMQTTClient = myMQTTClient;
//     }
//
//
//    /**
//      * 丢失连接，可在这里做重连
//      * 只会调用一次
//      *
//      * @param throwable
//      */
//     @Override
//     public void connectionLost(Throwable throwable) {
//         //这种方式会出现bug：emqx服务端停止后重新启动，不会重连，因为该方法需要while (true) {}
//         log.error("mqtt connectionLost 连接断开，尝试重连");
//         if (null != MyMQTTClient.getClient() && !MyMQTTClient.getClient().isConnected()) {
//             try {
//                 MyMQTTClient.getClient().reconnect();
//             } catch (MqttException e) {
//                 e.printStackTrace();
//             }
//             log.info("尝试重新连接");
//         } else {
//             try {
//                 myMQTTClient.connect();
//             } catch (MqttException e) {
//                 e.printStackTrace();
//             }
//             System.out.println("尝试建立新连接");
//         }
//     }
//
//     /**
//      * @param topic
//      * @param mqttMessage
//      * @throws Exception
//      * subscribe后得到的消息会执行到这里面
//      */
//     @Override
//     public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
//         log.info("接收消息主题 : {}，接收消息内容 : {}", topic, new String(mqttMessage.getPayload()));
//         //发布消息主题
//         if (topic.equals("xyf")){
//             String s = new String(mqttMessage.getPayload());
//             log.info(s);
//             if ("1".equals(s)) {
//                 int i = 1 / 0;
//             }
//         }
//
//     }
//
//
//      /**
//      *连接成功后的回调 可以在这个方法执行 订阅主题  生成Bean的 MqttConfiguration方法中订阅主题 出现bug
//      *重新连接后  主题也需要再次订阅  将重新订阅主题放在连接成功后的回调 比较合理
//      * @param reconnect
//      * @param serverURI
//      */
//     @Override
//     public  void  connectComplete(boolean reconnect,String serverURI){
//         log.info("MQTT 连接成功，连接方式：{}",reconnect?"重连":"直连");
//         //订阅主题
//         myMQTTClient.subscribe("xyf", 1);
//     }
//
//     /**
//      * 消息到达后
//      * subscribe后，执行的回调函数
//      *
//      * @param s
//      * @param mqttMessage
//      * @throws Exception
//      */
//     /**
//      * publish后，配送完成后回调的方法
//      *
//      * @param iMqttDeliveryToken
//      */
//     @Override
//     public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
//         log.info("==========deliveryComplete={}==========", iMqttDeliveryToken.isComplete());
//     }
//   }
//
